home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Environments / Oberon⁄F™ 1.2 / Preinstalled version / Obx / Mod / Ascii / Ascii (.txt)
Encoding:
Oberon Document  |  1996-02-05  |  4.3 KB  |  122 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Helvetica
  16. Helvetica
  17. Helvetica
  18. MODULE ObxAscii;    (* formatted I/O from/to ASCII text files *)
  19.     IMPORT Files, Stores, Converters, TextModels, TextMappers, TextViews;
  20.     TYPE
  21.         Text* = POINTER TO RECORD
  22.             done-: BOOLEAN;    (* last operation was successful *)
  23.             reading: BOOLEAN;
  24.             form: TextMappers.Formatter;
  25.             scan: TextMappers.Scanner
  26.         END;
  27.     VAR conv: Converters.Converter;
  28.     PROCEDURE PathToFileSpec (path: ARRAY OF CHAR; VAR loc: Files.Locator; VAR name: Files.Name);
  29.         VAR i, j: INTEGER; ch: CHAR;
  30.     BEGIN
  31.         i := 0; j := 0; loc := Files.dir.This("");
  32.         WHILE (loc.res = 0) & (i < LEN(path) - 1) & (j < LEN(name) - 1) & (path[i] # 0X) DO
  33.             ch := path[i]; INC(i);
  34.             IF (j > 0) & (ch = "/") THEN name[j] := 0X; j := 0; loc := loc.This(name)
  35.             ELSE name[j] := ch; INC(j)
  36.             END
  37.         END;
  38.         IF path[i] = 0X THEN name[j] := 0X ELSE loc.res := 1; name := "" END
  39.     END PathToFileSpec;
  40.     PROCEDURE Open* (loc: Files.Locator; name: ARRAY OF CHAR): Text;
  41.         VAR s: Stores.Store; fname: Files.Name; text: Text;
  42.     BEGIN
  43.         IF loc = NIL THEN PathToFileSpec(name, loc, fname) ELSE COPY(name, fname) END;
  44.         IF loc.res = 0 THEN
  45.             Converters.Import(loc, fname, conv, s);
  46.             IF (s # NIL) & (s IS TextViews.View) THEN
  47.                 NEW(text); text.reading := TRUE; text.scan.ConnectTo(s(TextViews.View).ThisModel());
  48.                 RETURN text
  49.             ELSE RETURN NIL
  50.             END
  51.         ELSE RETURN NIL
  52.         END
  53.     END Open;
  54.     PROCEDURE NewText* (): Text;
  55.         VAR text: Text;
  56.     BEGIN
  57.         NEW(text); text.reading := FALSE; text.form.ConnectTo(TextModels.dir.New());
  58.         RETURN text
  59.     END NewText;
  60.     PROCEDURE Register* (t: Text; loc: Files.Locator; name: ARRAY OF CHAR);
  61.         VAR fname: Files.Name; v: TextViews.View;
  62.     BEGIN
  63.         IF ~t.reading & (name # "") THEN
  64.             IF loc = NIL THEN PathToFileSpec(name, loc, fname) ELSE COPY(name, fname) END;
  65.             IF loc.res = 0 THEN v := TextViews.dir.New(t.form.rider.Base());
  66.                 Converters.Export(loc, fname, conv, v); t.done := TRUE
  67.             ELSE t.done := FALSE
  68.             END
  69.         ELSE t.done := FALSE
  70.         END
  71.     END Register;
  72.     PROCEDURE Eot* (t: Text): BOOLEAN;
  73.     BEGIN
  74.         RETURN t.reading & t.scan.rider.eot
  75.     END Eot;
  76.     PROCEDURE ReadChar* (t: Text; VAR c: CHAR);
  77.     BEGIN
  78.         ASSERT(t.reading, 20);
  79.         t.scan.rider.ReadChar(c); t.done := ~t.scan.rider.eot
  80.     END ReadChar;
  81.     PROCEDURE ReadString* (t: Text; VAR s: ARRAY OF CHAR);
  82.     BEGIN
  83.         ASSERT(t.reading, 20);
  84.         t.scan.Scan; t.done :=  t.scan.type = TextMappers.string; COPY(t.scan.string, s)
  85.     END ReadString;
  86.     PROCEDURE ReadInt* (t: Text; VAR i: LONGINT);
  87.     BEGIN
  88.         ASSERT(t.reading, 20);
  89.         t.scan.Scan; t.done := t.scan.type = TextMappers.int; i := t.scan.int
  90.     END ReadInt;
  91.     PROCEDURE WriteString* (t: Text; s: ARRAY OF CHAR);
  92.     BEGIN
  93.         ASSERT(~t.reading, 20);
  94.         t.form.WriteString(s); t.done := TRUE
  95.     END WriteString;
  96.     PROCEDURE WriteLn* (t: Text);
  97.     BEGIN
  98.         ASSERT(~t.reading, 20);
  99.         t.form.WriteLn; t.done := TRUE
  100.     END WriteLn;
  101.     PROCEDURE WriteInt* (t: Text; i: LONGINT);
  102.     BEGIN
  103.         ASSERT(~t.reading, 20);
  104.         t.form.WriteInt(i); t.done := TRUE
  105.     END WriteInt;
  106. BEGIN
  107.     conv := Converters.list;
  108.     WHILE (conv # NIL) & (conv.imp # "HostTextConv.ImportText") DO
  109.         conv := conv.next
  110. END ObxAscii.
  111. TextControllers.StdCtrlDesc
  112. TextControllers.ControllerDesc
  113. Containers.ControllerDesc
  114. Controllers.ControllerDesc
  115. TextRulers.StdRulerDesc
  116. TextRulers.RulerDesc
  117. TextRulers.StdStyleDesc
  118. TextRulers.StyleDesc
  119. TextRulers.AttributesDesc
  120. Helvetica
  121. Documents.ControllerDesc
  122.